import axios from 'axios'
import QueryString from 'qs';
import qs from 'qs'
import config from './config.js'
//根据环境变量区分接口地址 可选:开发模式,测试模式,生产模式 默认是生产模式,更改地址可以通过config.js
switch(process.env.NODE_ENV){
  case "production":
    axios.defaults.baseURL=`${config.baseURL.production}`
    break;
  case "test":
    axios.defaults.baseURL=`${config.baseURL.test}`
    break;
  default:
    axios.defaults.baseURL=`${config.baseURL.development}`
}
//设置超时时间和跨域是否允许携带凭证
axios.defaults.timeout=10000;
axios.defaults.withCredentials=true

//设置POST请求头，告知服务器请求主体的格式(这边设置成x-www-form-urlencoded格式，也可以设置json格式)
axios.defaults.headers['Content-Type']='application/x-www-form-urlencoded'
axios.defaults.transformRequest=data=>qs.stringify(data)

//拦截器设置
  //请求拦截器
axios.interceptors.request.use(config=>{
  //携带上token
  let token=localStorage.getItem('token')
  token && (config.headers.Authorization =token)
  //携带上cookie
  let cookie=encodeURIComponent(localStorage.getItem('cookie'))
  //请求时带上时间戳和cookie
  if (config.method == 'post') {
    config.data = {
      ...config.data,
      cookie,
      tooken,
      _t: Date.parse(new Date()) / 1000
    }
  }
  else if (config.method == 'get') {
    config.params = {
      _t: Date.parse(new Date()) / 1000,
      cookie,
      ...config.params
    }
  }
  return config
},error=>{
  return Promise.reject(error)
});
//响应拦截器
axios.interceptors.response.use(response=>{
     return response
  },error=>{
     let {response}=error;
     if(response){
       //服务器最起码返回结果
      switch(response.status){
         case 301://没登录就调用了需要登录的接口,网易云api特有
          error.message='未登录，请先登录'
          alert('未登录，请先登录')
          break;
         case 401://当前请求需要用户验证(不同公司需求不同,这里瞎写的)
          break;
         case 403://服务器已经理解请求，但是拒绝执行(token过期)
          localStorage.removeItem('token');
          //跳转到登录页
          //还没做
          break;
          //以下状态码随便写的
         case 404:
          error.message='请求失败，请求所希望得到的资源未被在服务器上发现'
          break;
         case 460:
          error.message='cheating异常'
          break;
         case 501:
          error.message = '服务未实现'
          break
         case 502:
          error.message = '网关错误'
          break
         case 503:
          error.message = '服务不可用'
          break
         case 504:
          error.message = '网关超时'
          break
         case 505:
          error.message = 'HTTP版本不受支持'
          break
      }
      }else{
       if(!window.navigator.onLine){
         //断网处理:（还没写）
         return;
       }
       console.log(error);
       return Promise.reject(error);
      }
})
export default axios